package com.itheima.service.impl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.constant.Constant;
import com.itheima.dao.CategoryDao;
import com.itheima.domain.Category;
import com.itheima.service.CategoryService;
import com.itheima.utils.JedisUtils;
import com.itheima.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import redis.clients.jedis.Jedis;

import java.util.Date;
import java.util.List;

public class CategoryServiceImpl implements CategoryService {
    @Override
    public List<Category> findAll() {
        System.out.println("程序员A编写了一行代码");
        System.out.println("程序员B编写了一行代码");
        System.out.println("程序员A编写了第二行代码");
        System.out.println("这是在Dev分支第一次编写的代码");
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        CategoryDao categoryDao = sqlSession.getMapper(CategoryDao.class);
        List<Category> categoryList = categoryDao.findAll();

        MyBatisUtils.commitAndClose(sqlSession);
        return categoryList;
    }

    /**
     * 目的: 有缓存 先读缓存 没有缓存 读取数据库 建立缓存
     * @return
     */
    @Override
    public String findJson() {
        System.out.println();
        String json = null;
        try {
            //1.获得缓存数据 查看是否有缓存数据
            Jedis jedis = JedisUtils.getJedis();
            //获得缓存数据
            json = jedis.get(Constant.CATEGORY_LIST);
            //2.如果没有
            if(json == null){ // 没有缓存的时候
                //查询数据库
                List<Category> categoryList = this.findAll();
                //转换json并赋值
                json = new ObjectMapper().writeValueAsString(categoryList);
                //将json存入缓存
                jedis.set( Constant.CATEGORY_LIST ,json);

                System.out.println("从数据库读取");
            }else{
                System.out.println("从缓存读取");
            }


            //3.如果有
            jedis.close();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return json;
    }
}
